home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
tools
/
rb
/
jlcd100.lzh
/
JLCD
/
SAMP
/
JLCDCON1.s
< prev
next >
Wrap
Text File
|
1997-12-28
|
9KB
|
507 lines
.include tnb.mac
.include iocscall.mac
.include doscall.mac
.include JLCDCALL.mac
HEAD1 = '*JLD'
HEAD2 = 'OS00'
StartStatio:*******************常駐部
SS:
head:
.dc.l HEAD1
.dc.l HEAD2
.even
PUTCHAR:
*=========================================
* ($ff02)[$1808]
*
move.l d0,-(sp)
move.w (a6),d0
bsr JLCDV
move.l (sp)+,d0
PUTCHAR_JMP:
move.l PUTCHAR_JPT(pc),-(sp)
rts
PUTCHAR_JPT:
.dc.l 0
PRINT:
*=========================================
* ($ff09)[$1824]
*
movem.l d0/a1,-(sp)
move.l (a6),a1
moveq #0,d0
move.b (a1),d0
bsr JLCDV
movem.l (sp)+,d0/a1
PRINT_JMP:
move.l PRINT_JPT(pc),-(sp)
rts
PRINT_JPT:
.dc.l 0
FPUTC:
*=========================================
* ($ff1d)[$0114]
*
move.l d0,-(sp)
move.w (a6),d0
bne @f
move.w 2(a6),d0
bsr JLCDV
@@: move.l (sp)+,d0
FPUTC_JMP:
move.l FPUTC_JPT(pc),-(sp)
rts
FPUTC_JPT:
.dc.l 0
FPUTS:
*=========================================
* ($ff09)[$0114]
*
movem.l d0/a1,-(sp)
move.w (a6),d0
bne @f
move.l 2(a6),a1
moveq #0,d0
move.b (a1),d0
bsr JLCDV
@@: movem.l (sp)+,d0/a1
FPUTS_JMP:
move.l FPUTS_JPT(pc),-(sp)
rts
FPUTS_JPT:
.dc.l 0
*===================================================
*in d0 文字コード
*
*
JLCDV:
movem.l d1-d3/a1,-(sp)
move.b d0,JLCDV_ST
cmpi.w #$0100,d0
bcc 2f
move.b d0,d1
andi.b #$E0,d1
beq 2f
cmpi.b #$80,d1
beq 2f
cmpi.b #$E0,d1
bne 1f
2: *---- 表示出来ない文字
subq.w #1,JLCDV_ZF
bmi @f
move.b #'*',JLCDV_ST
bra 1f
@@: move.b #'#',JLCDV_ST
move.w #3,JLCDV_ZF
1:
*----
* moveq #-1,d2 * チェック
* JLCD _JLCD_INIT
* tst.l d0
* bne 9f * 他のアプリが占領
*----
moveq #$43,d2 * (3,1)
*moveq #1,d2 * (1,0)
moveq #0,d3
lea JLCDV_ST,a1
JLCD _JLCD_PRINT2
9:
movem.l (sp)+,d1-d3/a1
rts
JLCDV_ZF:
.dc.w 2
JLCDV_ST:
.dc.b 0,0
.even
EndStatio:*******************常駐部
MarkerChk:*----------------------------------------
* a0 アドレス
*
*[戻り値] bne ちがう
* beq あっている
cmpa.l #$F0000000,a0
bcc @f
cmp.l #HEAD1,(a0)
bne @f
cmp.l #HEAD2,4(a0)
bne @f
cmpa.l a0,a0 *z=1
@@:
rts
InvChk:*----------------------------------------
* a0.l==なら非常駐
* a0.l!=なら常駐
movea.l (a0),a0 *一つ前のポインタ
cmpa.l #$F0000000,a0
bcc IC1
cmp.l #HEAD1,$0100+(head-SS)(a0)
bne @f
cmp.l #HEAD2,$0104+(head-SS)(a0)
bne @f
adda.l #$100,a0 **[SS]のポインタ
rts
@@: **違う
tst.l (a0) *一つ前のポインタ
bne InvChk *0でない(上へ)
IC1: sub.l a0,a0 *非常駐
rts
AtoI:*----------------------------------------
* a2 アドレス
*[戻り値] d0.l 数字
moveq #0,d0
move.b (a2),d2
cmpi.b #'$',d2
jbeq AtoHI
@@: move.b (a2)+,d2
subi.b #'0',d2
jbcs AIr
cmpi.b #9,d2
jbhi AIr
andi.l #$0000FF,d2
mulu #10,d0
add.l d2,d0
jbra @b
AIr: subq #1,a2
rts
AtoHI:
*(Hex専用)
move.b (a2)+,d2 *$ skip
@@: move.b (a2)+,d2
subi.b #'0',d2
jbcs AHIL1
cmpi.b #9,d2
jbhi AHIL1
lsl.l #4,d0
add.l d2,d0
jbra @b
AHIL1:
ori.b #$20,d2
subi.b #'a'-'0',d2
jbcs AHIL2
cmpi.b #5,d2
jbhi AHIL2
lsl.l #4,d0
addi.l #10,d0
add.l d2,d0
jbra @b
AHIL2: subq #1,a2
rts
clcf: .dc.w 0
cmdlinchk:*------------------------------------------------------------------
* in a2 = 文字列
* out d0.b 0 ; OK
* -1 ; LINEERR
* -2 ; COMDERR
* -100; その他
* 'h' ; -?
* 'h' ; -H
* 'r' ; -R
*
clr.w clcf
bra sw
cmdlinchkD: ** DEVICE エントリ用
move.w #-1,clcf
sw: move.b (a2)+,d0
bne 1f
*======終わり?
tst.w clcf
bne @f
*======COMLINE からなので終わり
moveq #0,d0
rts
@@: *====== DEVICE
move.b (a2),d0
bne sw
moveq #0,d0 * 0が連続なので終わり
rts
1:
cmpi.b #' ',d0
beq sw
cmpi.b #$09,d0 *tab
beq sw
cmpi.b #'-',d0
beq swc
cmpi.b #'/',d0
beq swc
swe: *======コマンドラインが異常
moveq #-1,d0
rts
swc:
*======スイッチ判断
move.b (a2)+,d0
beq swe
cmpi.b #'?',d0
bne @f
moveq #'h',d0
rts
@@:
ori.b #$20,d0 *小文字化!
cmpi.b #'r',d0
beq clcrts
cmpi.b #'h',d0
beq clcrts
@@:
moveq #-2,d0
clcrts:
rts
init:*------------------------------------------------------------------
move.l a0,ExA0
Print LR1(pc)
** 常駐チェック **
suba.l a1,a1
SUPER
movea.l d0,a1
moveq #0,d1
bsr InvChk
movea.l a0,a3 *常駐先頭アドレス
move.w #_PUTCHAR,-(sp)
DOS _INTVCG
addq.l #2,sp
movea.l d0,a0
suba.l #PUTCHAR-head,a0
bsr MarkerChk
bne @f
bset #0,d1
@@:
move.w #_PRINT,-(sp)
DOS _INTVCG
addq.l #2,sp
movea.l d0,a0
suba.l #PRINT-head,a0
bsr MarkerChk
bne @f
bset #1,d1
@@:
move.w #_FPUTC,-(sp)
DOS _INTVCG
addq.l #2,sp
movea.l d0,a0
suba.l #FPUTC-head,a0
bsr MarkerChk
bne @f
bset #2,d1
@@:
move.w #_FPUTS,-(sp)
DOS _INTVCG
addq.l #2,sp
movea.l d0,a0
suba.l #FPUTS-head,a0
bsr MarkerChk
bne @f
bset #3,d1
@@:
*d1に常駐状態
.if 0
** 常駐していたらそのデータを引用 **
move.l a3,d0
beq conl
lea __COM__-SS(a3),a0
lea __COM__,a6
move.l #(__COM__S-__COM__)/2-1,d0
@@: move.w (a0)+,(a6)+
dbra d0,@b
.endif
conl:
tst.b (a2)+ *スキップ
bsr cmdlinchk *a2 に文字列もって bsr
tst.b d0
bne 1f
bra keep
1:
cmpi.b #-100,d0
bne @f
DOS _EXIT
@@:
cmpi.b #-1,d0
bne @f
pea LR6(pc)
bra PE *end
@@:
cmpi.b #'r',d0
beq free
cmpi.b #'h',d0
beq help
pea LR7(pc) * -2 もここだ!
bra PE *end
help:
pea LRH(pc)
bra PE *end
keep: ************************** 常駐させる
move.l a3,d0
beq keepL1
*既に常駐、設定変更
.if 0
lea __COM__-SS(a3),a0
lea __COM__,a6
move.l #(__COM__S-__COM__)/2-1,d0
@@: move.w (a6)+,(a0)+
dbra d0,@b
.endif
move.w MC(pc),d0
bne @f
pea LR5(pc)
bra PE *end
@@: pea LR5_(pc)
bra PE *end
keepL1:
*==============セット
*---- JLCD はある?
JLCD _JLCD_VER
cmpi.w #$4A4C,d0
beq @f
pea LRNJ(pc)
bra PE *end
@@:
* *---- JLCD は時計?!
* moveq #-1,d2 * チェック
* JLCD _JLCD_INIT
* tst.l d0
* beq @f
* pea LRNE(pc) * アプリが使っている
* bra PE *end
*@@:
bsr keepdisp
Print LRKP(pc)
clr.w -(sp)
move.l #EndStatio-StartStatio,d0
move.l d0,-(sp)
DOS _KEEPPR
keepdisp:***************
pea PUTCHAR
move.w #_PUTCHAR,-(sp)
DOS _INTVCS
addq.l #6,sp
move.l d0,PUTCHAR_JPT
pea PRINT
move.w #_PRINT,-(sp)
DOS _INTVCS
addq.l #6,sp
move.l d0,PRINT_JPT
pea FPUTC
move.w #_FPUTC,-(sp)
DOS _INTVCS
addq.l #6,sp
move.l d0,FPUTC_JPT
pea FPUTS
move.w #_FPUTS,-(sp)
DOS _INTVCS
addq.l #6,sp
move.l d0,FPUTS_JPT
*--
rts
free: *****************************常駐解除
move.l a3,d0
bne @f
pea LR8(pc) **非常駐
bra PE *end
@@:
cmpi.w #$0f,d1
beq @f
pea LR4(pc) **ベクタが占領
bra PE *end
@@:
move.l (PUTCHAR_JPT-SS)(a3),-(sp)
move.w #_PUTCHAR,-(sp)
DOS _INTVCS
addq.l #6,sp
move.l (PRINT_JPT-SS)(a3),-(sp)
move.w #_PRINT,-(sp)
DOS _INTVCS
addq.l #6,sp
move.l (FPUTC_JPT-SS)(a3),-(sp)
move.w #_FPUTC,-(sp)
DOS _INTVCS
addq.l #6,sp
move.l (FPUTS_JPT-SS)(a3),-(sp)
move.w #_FPUTS,-(sp)
DOS _INTVCS
addq.l #6,sp
*---- JLCD を掃除
moveq #$43,d2 * (3,1)
*moveq #1,d2 * (1,0)
moveq #0,d3
lea CR_ST,a1
JLCD _JLCD_PRINT2
*--
sub.l #$00000F0,a3
move.l a3,-(sp)
DOS _MFREE
addq.l #4,sp
pea LR3(pc)
PE: DOS _PRINT
addq.l #4,sp
DOS _EXIT
CR_ST:
.dc.b ' ',0
.even
*------------------------------------------*
ExA0: .dc.l 0
MC: .dc.w 0 *モードをいじった
LR2: .dc.b ' 「白窓君」に CRT 表示する文字を1文字表示します。',$0d,$0a,0
LRKP: .dc.b ' 常駐しました。',$0d,$0a,0
LR3: .dc.b ' 常駐解除しました。',$0d,$0a,0
LR4: .dc.b ' ベクタが占領されています。',$0d,$0a,0
LR5: .dc.b ' 既に常駐しています。',$0d,$0a,0
LR5_: .dc.b ' 設定を変更しました。 ',$0d,$0a,0
LR6: .dc.b ' コマンドラインが異常です。',$0d,$0a,0
LR7: .dc.b ' スイッチが異常です。',$0d,$0a,0
LR8: .dc.b ' 常駐していません。',$0d,$0a,0
LRNJ: .dc.b ' 「白窓君」DRIVER がありません。',$0d,$0a,0
LRNE: .dc.b ' 「白窓君」は他のアプリが占領しています。',$0d,$0a,0
LRCN: .dc.b ' CONFIG.SYSで登録されています。',$0d,$0a
.dc.b ' 常駐解除できません。',$0d,$0a,0
.even
LRH: .dc.b $0d,$0a
.dc.b '使用法:JLCDCON1.x [switch] ',$0d,$0a
.dc.b ' /R ・・・・・・・・ 常駐解除します。',$0d,$0a
.dc.b $0d,$0a
.dc.b 0
.even
LR1: .dc.b 'X68k 「白窓君」 CON 1文字表示 Version 1.00 Copyright 1997 TNB製作所'
CRLF: .dc.b $0d,$0a,0
.even
.end init